HW6 (due Wednesday, Dec 5, midnight)
------------------------------------

In this homework you will:
1) extend the SKOOL language discussed and defined in class with
private methods; and
2) do some proofs about denotational semantics

Problem 1 (20 points)
---------------------

Unlike in previous HWs, you are now given the complete definition of
the language.  Instead of completing it, you are now required to
extend it.  More precisely, you have to add private methods to SKOOL.
In case you have any doubts about the precise semantics of private
methods, just assume the semantics they have in Java.  The syntax
should be the same as for the other methods except that the keyword
"method" is replaced by "private method".  If you have strong reasons
to change this syntax, thus making our automatic test stripts fail,
make sure that we are aware of that.

Unlike before, this time you are NOT given the syntax and the
strictness equations for the extended language.  You will have to
define these as well.  As before, the root directory contains all the
language definitions that we discussed so far in class, all updated to
work with the latest k-prelude.  There are some "advisory" warnings
when the new prelude is loaded, which you can safely ignore.  If you
don't want to see them, then use "maude -no-advisory file.maude".  The
good part of the new prelude is that programs can now use any integers
and booleans without having to prefix them with a "#"; also, all those
equations involving "#" have dissapeared.  In other words, programs
look much more realistic now.

Recall from the text in the previous HW description that the
strictness modules are all generated automatically in all our
definitions, so you should not bother to understand what is there or
edit them.  In case you need to generate a new strictness module to
replace the previous one, please follow the instuctions in the
README.txt of the previous HW.

Grading:
- Syntax = 5 points
- Semantics = 10 points
- Examples: 1 point each different one, 5 points maximum

We are going to merge all the examples that you provide us with, plus
some of ours, and then use that as a test benchmark for grading.
Therefore, it is in your best interest to come up with examples that
are as tricky as your definition can handle.


Problem 2 (20 points)
---------------------

Prove the homework exercises in the lecture notes on denotational semantics.

Grading:
- Exercise on page 29 = 10 points
- Exercise on page 32 = 10 points
(possible hint for the second one: you may use as a lemma one of the
equivalences between operational semantics discussed previously in the
class)
